home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / bookmark_previews-0.6.5-fx.xpi / chrome / content / tooltip.js < prev   
Text File  |  2008-05-27  |  6KB  |  176 lines

  1. var BP = {
  2.   _titleNode : null,
  3.   _previewNode : null,
  4.   get titleNode(){
  5.     if (!this._titleNode)
  6.       this._titleNode = document.getElementById("bptp_title");
  7.     return this._titleNode;
  8.   },
  9.   get previewNode(){
  10.     if (!this._previewNode)
  11.       this._previewNode = document.getElementById("bptp_image");
  12.     return this._previewNode;
  13.   },
  14.   _prefs : null,
  15.   get prefs(){
  16.     if (!this._prefs){
  17.       this._prefs = Components.classes["@mozilla.org/preferences-service;1"].
  18.                     getService(Components.interfaces.nsIPrefService);
  19.       this._prefs = this._prefs.getBranch("extensions.bookmarkpreviews.");
  20.     }
  21.     return this._prefs;
  22.   },
  23.   _isFF3: null,
  24.   get isFF3(){
  25.     if (this._isFF3 == null){
  26.       var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
  27.                               .getService(Components.interfaces.nsIXULAppInfo);
  28.       var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  29.                                      .getService(Components.interfaces.nsIVersionComparator);
  30.       if(versionChecker.compare(appInfo.version, "3.0a") >= 0) {
  31.         this._isFF3 = true;
  32.       } else{
  33.         this._isFF3 = false;
  34.       }
  35.     }
  36.     return this._isFF3;
  37.   },
  38.   _tree: null,
  39.   get tree(){
  40.     if (!this._tree){
  41.       this._tree = document.getElementById("bookmarks-view");
  42.     }
  43.     return this._tree;
  44.   },
  45.   get children(){
  46.     if (this.isFF3){
  47.       return document.getElementById("bookmarks-view-children");
  48.     } else {
  49.       return this.tree.tree.getElementsByTagName("treechildren");
  50.     }
  51.   },
  52.   load: function bp_load(event){
  53.     BP.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2).addObserver("",BP,false);
  54.     var show = BP.prefs.getBoolPref("sidebarTooltips");
  55.     if (!show){
  56.       BP.disableTooltip();
  57.     } else{
  58.       BP.enableTooltip();
  59.     }
  60.   },
  61.   unload: function bp_unload(event){
  62.     BP.prefs.removeObserver("",BP,false);
  63.     BP.disableTooltip();
  64.   },
  65.   handleEvent: function bp_handleevent(event){
  66.     if (event.type == "mousemove"){
  67.       BP.x = event.clientX;
  68.       BP.y = event.clientY;
  69.     }
  70.   },
  71.   observe: function bp_observe(subject, topic, data){
  72.     if (topic != "nsPref:changed"){
  73.       return;
  74.     }
  75.     if (data == "sidebarTooltips"){
  76.       var show = this.prefs.getBoolPref("sidebarTooltips");
  77.       if (show){
  78.         this.enableTooltip();
  79.       } else{
  80.         this.disableTooltip();
  81.       }
  82.     }
  83.   },
  84.   disableTooltip: function bp_disabletooltip(){
  85.     if (this.isFF3)
  86.       this.children.removeAttribute("tooltip");
  87.     else {
  88.       var eles = this.children;
  89.       for (var i = 0; i<eles.length;i++){
  90.         eles[i].removeAttribute("tooltip");
  91.       }
  92.     }
  93.     try{
  94.       this.tree.removeEventListener("mousemove",this,false);
  95.     }catch(e){}
  96.   },
  97.   enableTooltip: function bp_enabletooltip(){
  98.     this.tree.addEventListener("mousemove",this.handleEvent,false);
  99.     if (this.isFF3)
  100.       this.children.setAttribute("tooltip","bookmarkpreviewsTooltip");
  101.     else {
  102.       var eles = this.children;
  103.       for (var i = 0; i<eles.length;i++){
  104.         eles[i].setAttribute("tooltip","bookmarkpreviewsTooltip");
  105.       }
  106.     }
  107.   },
  108.   tooltipShowing: function bp_tooltipshowing(event){
  109.     this.previewNode.src = null;
  110.     this.previewNode.removeAttribute("style");
  111.     this.previewNode.collapsed = true;
  112.     return true;
  113.   },
  114.   tooltipShown: function bp_tooltipshown(event){
  115.     var tooltip = event.target;
  116.     var x = BP.x; var y = BP.y;
  117.     var row = this.tree.treeBoxObject.getRowAt(x,y);
  118.     var title = {}, url = {};
  119.     this.getProperties(row,title,url);
  120.     this.titleNode.setAttribute("value",title.value);    
  121.     
  122.     var src = this.getImage(url.value);
  123.     if (src){
  124.       var image = new Image();
  125.       image.onload = function(event){
  126.         var target = BP.previewNode;
  127.         var maxwidth = 300;
  128.         var width = image.width;
  129.         var height = image.height;
  130.         if (width>maxwidth){
  131.           height = maxwidth / width * height;
  132.           target.setAttribute("style","max-width: "+maxwidth+"px; max-height: "+height+"px");
  133.           target.src = src;
  134.         }
  135.       };
  136.       image.src = src;
  137.       if (image.complete) image.onload();
  138.       this.previewNode.collapsed = false;
  139.     } else{
  140.       this.previewNode.collapsed = true;
  141.     }
  142.   },
  143.   getImage: function bp_getimage(url){
  144.     if (url){
  145.       var file = PreviewServiceUtils.getPreviewFile(url);
  146.       if (file.exists() && file.isFile()){
  147.         var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  148.         var uri = ios.newFileURI(file);
  149.         if (uri)
  150.           return uri.spec;
  151.       }
  152.     }
  153.     return null;
  154.   },
  155.   getProperties: function bp_getproperties(index, title, url){
  156.     if (index > -1){
  157.       if (this.isFF3){
  158.         var node = this.tree.view.nodeForTreeIndex(index);
  159.         title.value = node.title;
  160.         url.value = node.uri;
  161.       } else {
  162.         var node = this.tree.getRowResource(index);
  163.         var nameProp = RDF.GetResource("http://home.netscape.com/NC-rdf#Name");
  164.         var urlProp  = RDF.GetResource("http://home.netscape.com/NC-rdf#URL")
  165.         var itemValue = BMDS.GetTarget(node, nameProp, true);
  166.         if (itemValue && itemValue instanceof Components.interfaces.nsIRDFLiteral)
  167.           title.value = itemValue.Value;
  168.         var itemValue = BMDS.GetTarget(node, urlProp, true);
  169.         if (itemValue && (itemValue instanceof Components.interfaces.nsIRDFLiteral || itemValue.Value))
  170.           url.value = itemValue.Value;
  171.       }
  172.     }
  173.   }
  174. }
  175. addEventListener("load",BP.load,false);
  176. addEventListener("unload",BP.unload,false);